
#ifndef _Attribute_h
#define _Attribute_h

// C# includes.
#include <Typedef.h>
#include <Defines.h>
#include <CSharpPropertyMethods.h>

#include <System/Guid.h>
#include <System/IntPtr.h>

namespace Riccsson
{
	namespace System
	{
		// Summary:
		//     Exposes the System.Attribute class to unmanaged code.
		//[CLSCompliant(false)]
		//[ComVisible(true)]
		//[Guid("917B14D0-2D9E-38B8-92A9-381ACF52F7C0")]
		//[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
		//[TypeLibImportClass(typeof(Attribute))]
		interface _Attribute
		{
			// Summary:
			//     Maps a set of names to a corresponding set of dispatch identifiers.
			//
			// Parameters:
			//   riid:
			//     Reserved for future use. Must be IID_NULL.
			//
			//   rgszNames:
			//     An array of names to be mapped.
			//
			//   cNames:
			//     The count of the names to be mapped.
			//
			//   lcid:
			//     The locale context in which to interpret the names.
			//
			//   rgDispId:
			//     An array allocated by the caller that receives the identifiers corresponding
			//     to the names.
			public: virtual void GetIDsOfNames(Guid ref riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId) = 0;

			//
			// Summary:
			//     Retrieves the type information for an object, which can be used to get the
			//     type information for an interface.
			//
			// Parameters:
			//   iTInfo:
			//     The type information to return.
			//
			//   lcid:
			//     The locale identifier for the type information.
			//
			//   ppTInfo:
			//     A pointer to the requested type information object.
			public: virtual void GetTypeInfo(uint iTInfo, uint lcid, IntPtr ppTInfo) = 0;
			//
			// Summary:
			//     Retrieves the number of type information interfaces that an object provides
			//     (either 0 or 1).
			//
			// Parameters:
			//   pcTInfo:
			//     When this method returns, contains a pointer to a location that receives
			//     the number of type information interfaces provided by the object. This parameter
			//     is passed uninitialized.
			public: virtual void GetTypeInfoCount(uint out pcTInfo) = 0;
			//
			// Summary:
			//     Provides access to properties and methods exposed by an object.
			//
			// Parameters:
			//   dispIdMember:
			//     An identifier of a member.
			//
			//   riid:
			//     Reserved for future use. Must be IID_NULL.
			//
			//   lcid:
			//     The locale context in which to interpret arguments.
			//
			//   wFlags:
			//     Flags describing the context of the call.
			//
			//   pDispParams:
			//     A pointer to a structure containing an array of arguments, an array of argument
			//     DISPIDs for named arguments, and counts for the number of elements in the
			//     arrays.
			//
			//   pVarResult:
			//     A pointer to the location where the result will be stored.
			//
			//   pExcepInfo:
			//     A pointer to a structure that contains exception information.
			//
			//   puArgErr:
			//     The index of the first argument that has an error.
			public: virtual void Invoke(uint dispIdMember, Guid ref riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr) = 0;
		};
	}
}

#endif